// vite.config.js 或 vite.config.ts
import { defineConfig } from "vite";
import fs from "fs";
import path from "path";
import parser from "@babel/parser";
import traverse from "@babel/traverse";
import generate from "@babel/generator";





const preBuildPlugin = (options) => {
  let haveCommand = false;
  return {
    name: "vite-uni-devtools-cli",
    configResolved(config) {
      // 判断当前是否是生产环境构建
      haveCommand = config.command === "build";
    },
    buildStart() {
      if (haveCommand) {
        // 判断有无 devtools 所需文件，没有则提醒
        if (!fs.existsSync("./src/devTools")) {
          console.log("未找到 uniDevTools 所需文件，请确定文件存放的路径 src/ 是否正确，如未下载，可前往 https://dev.api0.cn/guide/install 并下载相关文件");
        }
      }
    },
    transform(code, id) {
      if (!haveCommand) return code; // 如果没有在生产环境构建，则返回原始代码

      // 涉及文件列表以及处理
      const fileList = [{
        name: "main",
        path: "src/main.ts",
        format: (code) => {
          const ast = parser.parse(code, {
            sourceType: 'module',
            plugins: ['typescript']
          });

          traverse(ast, {
            CallExpression(path) {
              if (path.node.callee.name === 'createSSRApp') {

                // ATS 判断 定义 createSSRApp 的变量名
                const appName = 


                // 在 createSSRApp 调用之后插入代码
                path.node.arguments.push(
                  parser.parseExpression(`
  // ---- Devtools --------------------------------------------------
  import devTools from "@/devTools/index.js";
  import devToolsConfig from "@/devTools/config.js";
  import mpDevBubble from "@/devTools/core/components/mpDevBubble.vue";
  import devToolsVueMixin from "@/devTools/core/proxy/vueMixin.js";
  // -----------------------------------------------------------------
  // ---- Devtools -----------------------------------------------------
  //混入DevTools生命周期监听
  app.mixin(devToolsVueMixin);
  //挂载Devtools
  app.use(devTools, devToolsConfig);
  //注册小程序端专用的拖动浮标组件
  app.component("mpDevBubble", mpDevBubble);
  // ------------------------------------------------------
                    `)
                );
              }
            }
          });

          // 生成新的代码
          return generate(ast, {}, code).code;

        },
      }]

      // 循环 fileList 处理文件
      for (const file of fileList) {
        const filePath = path.resolve(__dirname, file.path);

        // 如果路径不等于当前文件路径，则跳过
        if (filePath !== id) continue;

        return file.format(code); // 返回处理后的代码
      }
      return code; // 返回原始代码
    },
  };
};

export default defineConfig({
  plugins: [
    preBuildPlugin(),
    // ...其他插件
  ],
  // ...其他 Vite 配置项
});
